using System;
using Curriculum.Utiles;

namespace Curriculum.Modelo.Clases
{
	public class ListaAntecedente : ListaAbstracta
	{
		public ListaAntecedente()
		{}

		protected override Type GetTipoElemento()
		{
			return typeof(Antecedente);
		}

		// es recursivo en el arbol de antecedentes
		public Antecedente GetAntecedentePersistente(string id)
		{
			foreach(Antecedente antecedentePersistente in this.lista)
			{
				if (antecedentePersistente.IdAntecedente == id)
					return antecedentePersistente;
				else
				{
					Antecedente antecedenteBuscado;
					if ((antecedentePersistente.ListaAntecedente != null) &&
						((antecedenteBuscado = antecedentePersistente.ListaAntecedente.GetAntecedentePersistente(id)) != null) )
					{
						return antecedenteBuscado;
					}

				}
			}
			return null;
		}

		public void Add(ListaAntecedente lista)
		{
			foreach (Antecedente antecedente in lista)
			{
				this.lista.Add(antecedente);
			}
		}
	}
	

	public class ListaAtributo : ListaAbstracta
	{
		public ListaAtributo()
		{}

		protected override Type GetTipoElemento()
		{
			return typeof(Atributo);
		}

	}

	public class ListaJurado : ListaAbstracta
	{
		public ListaJurado()
		{			
		}

		protected override Type GetTipoElemento()
		{
			return typeof(Jurado);
		}
	}


	public class ListaCalificacionAntecedente : ListaAbstracta
	{
		public ListaCalificacionAntecedente()
		{			
		}

		protected override Type GetTipoElemento()
		{
			return typeof(CalificacionAntecedente);
		}
	}


	public class ListaDocente : ListaAbstracta
	{
		public ListaDocente()
		{			
		}

		protected override Type GetTipoElemento()
		{
			return typeof(Docente);
		}
	}


	public class ListaJuradoEnConcurso : ListaAbstracta
	{
		public ListaJuradoEnConcurso()
		{			
		}

		protected override Type GetTipoElemento()
		{
			return typeof(JuradoEnConcurso);
		}
	}

	public class ListaCalificacionCV : ListaAbstracta
	{
		public ListaCalificacionCV()
		{			
		}

		protected override Type GetTipoElemento()
		{	
			return typeof(CalificacionCV);
		}
	}
}
